package system

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
	"go_cms/app/dto"
	"go_cms/app/param"
	"go_cms/app/service"
	"go_cms/utils"
)

type UserManegeController struct {

}

// 根据id来查询用户
func (this *UserManegeController) QueryUsersById(ctx *fiber.Ctx) error{
	uid:=ctx.Params("uid")
	token,err:=utils.GetToken(ctx)
	if err!=nil{
		return utils.Failed(ctx,"token 验证失败")
	}
	if utils.Debug{
		fmt.Printf("usermanage.go 20 uid=%s,token=%#v\n",uid,token)
	}
	if uid != token.Id {
		return utils.Failed(ctx,"token id 与当前请求的id不同，非法入侵！")
	}

	// 3.登陆 service 层实现
	us:=service.UserService{}
	userinfo:=us.QueryUsersById(uid)
	if userinfo!=nil {
		return utils.Success(ctx,userinfo)
	}

	return utils.Failed(ctx,"获取用户信息失败")
}

// 根据id删除用户
func (this *UserManegeController) DeleteUsersById(ctx *fiber.Ctx) error{
	uid:=ctx.Params("uid")
	// 3.登陆 service 层实现
	us:=service.UserService{}
	us.DeleteUsersById(uid)
	return utils.Success(ctx,"删除用户成功")
}

// 获取用户列表
func (this *UserManegeController) UsersList(ctx *fiber.Ctx) error {
	// 1 解析用户传递的参数
	var queryInfo param.QueryUserInfo
	err := ctx.BodyParser(&queryInfo)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 55:",queryInfo)
		//utils.Lzlog.Info("account.go 26:",loginParam)
	}
	// 3.登陆 service 层实现
	us:=service.UserService{}
	userslist,totalCount := us.UsersList(queryInfo)

	if userslist !=nil{
		var res dto.UsersInfo
		res.List= userslist
		res.TotalCount=totalCount
		return utils.Success(ctx,res)
	}

	return utils.Failed(ctx,"获取角色菜单error")
}

// 获取角色列表
func (this *UserManegeController) RoleList(ctx *fiber.Ctx) error {
	//token,err:=utils.GetToken(ctx)
	//if err!=nil{
	//	return utils.Failed(ctx,"token 验证失败")
	//}
	//if utils.Debug{
	//	fmt.Printf("advanceQuery.go 20,token=%#v\n",token)
	//}

	// 1 解析用户传递的参数
	var queryInfo param.Role
	err := ctx.BodyParser(&queryInfo)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 94:",queryInfo)
		//utils.Lzlog.Info("account.go 26:",loginParam)
	}
	// 3.登陆 service 层实现
	us:=service.UserService{}
	rolelist,totalCount := us.RoleList()

	if rolelist !=nil{
		var res dto.RoleInfo
		res.List= rolelist
		res.TotalCount=totalCount
		return utils.Success(ctx,res)
	}

	return utils.Failed(ctx,"获取角色菜单error")
}


// 获取菜单列表
func (this *UserManegeController) MenuList(ctx *fiber.Ctx) error {
	// 1 解析用户传递的参数

	// 3.登陆 service 层实现
	us:=service.UserService{}
	menulist,totalCount := us.MenuList()

	if menulist !=nil{
		menusList:=utils.MakeMenuTree(menulist)
		var res dto.MenuInfo
		res.List= menusList
		res.TotalCount=totalCount
		return utils.Success(ctx,res)
	}

	return utils.Failed(ctx,"获取角色菜单error")
}

// 获取部门列表
func (this *UserManegeController) DepartmentList(ctx *fiber.Ctx) error {

	// 1 解析用户传递的参数
	var queryInfo param.QueryUserInfo
	err := ctx.BodyParser(&queryInfo)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 146:",queryInfo)
		//utils.Lzlog.Info("account.go 26:",loginParam)
	}
	// 3.登陆 service 层实现
	us:=service.UserService{}
	departmentlist,totalCount := us.DepartmentList(queryInfo)

	if departmentlist !=nil{
		var res dto.DepartmentInfo
		res.List= departmentlist
		res.TotalCount=totalCount
		return utils.Success(ctx,res)
	}

	return utils.Failed(ctx,"获取角色菜单error")
}

// 创建用户
func (this *UserManegeController) CreateUser(ctx *fiber.Ctx) error{
	// 1 解析用户登陆传递的参数
	var params param.Users
	err := ctx.BodyParser(&params)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 169:",params)
		utils.Lzlog.Info("userManage.go 169:",params)
	}
	// 2、service层实现
	us:=service.UserService{}
	us.CreateUser(params)
	return utils.Success(ctx,"创建用户成功")
}

// 根据id更新用户
func (this *UserManegeController) UpdateUser(ctx *fiber.Ctx) error{
	// 获取路由的用户id
	uid:=ctx.Params("uid")
	// 2、解析前端传递过来的参数，来更新用户信息
	// 1 解析用户登陆传递的参数
	var params param.Users
	err := ctx.BodyParser(&params)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 191:",params)
		utils.Lzlog.Info("userManage.go 192:",params)
	}
	// 3.登陆 service 层实现
	us:=service.UserService{}
	us.UpdateUser(uid,params)
	return utils.Success(ctx,"更新用户成功")
}

// 创建角色
func (this *UserManegeController) CreateRole(ctx *fiber.Ctx) error{
	// 1 解析用户登陆传递的参数
	var params param.Role
	err := ctx.BodyParser(&params)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 169:",params)
		utils.Lzlog.Info("userManage.go 169:",params)
	}
	// 2、service层实现
	us:=service.UserService{}
	us.CreateRole(params)
	return utils.Success(ctx,"创建角色成功")
}

// 根据id更新角色
func (this *UserManegeController) UpdateRole(ctx *fiber.Ctx) error{
	// 获取路由的用户id
	uid:=ctx.Params("id")
	// 2、解析前端传递过来的参数，来更新用户信息
	// 1 解析用户登陆传递的参数
	var params param.Role
	err := ctx.BodyParser(&params)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (utils.Debug) {
		fmt.Println("userManage.go 232:",params)
		utils.Lzlog.Info("userManage.go 233:",params,uid)
	}
	// 3.登陆 service 层实现
	us:=service.UserService{}
	us.UpdateRole(uid,params)
	return utils.Success(ctx,"更新角色成功")
}
